基本概念
1.encodeComponent编码url,url不能直接使用,需要编码
var rlt = "http://service.weibo.com/share/share.php?";
var url = 'http://www.baidu.com';
var params = {
appkey: "379570494",
title: "领杉果红包,享更多优惠!点击领取:",
url: url
};
for (var i in params) {
rlt += i + '=' + params[i] + '&';
}
for (var i in params) {
rlt += i + '=' + encodeURIComponent(params[i]) + '&';
}
console.log(rlt);
问题的由来
1.URL就是网址,只要上网,就一定会用到.
只有字母和数字[0-9a-zA-Z],一些特殊符号$-_.+!*'(),以及某些保留字,才可以不经过编码直接用于URL.
2.这意味着,如果URL中有汉字,就必须编码后使用,但是麻烦的是,RFC1738没有规定具体的编码方法,
而是交给应用程序(浏览器)自己决定,这导致'URL编码'成为了一个混乱的领域.
3.包括:ajax请求url地址,浏览器上直接用get或post发出http请求,网址路径中包含汉字,查询字符串包含汉字.
4.使用js先对URL编码,然后再向服务器提交,不给浏览器插手的机会,
因为js的输出总是一致的,所以就保证了服务器得到的数据是格式统一的.
escape,unescape
escape()不能直接用于URL编码,他的真正作用是返回一个字符串的Unicode编码值.
encodeURI和decodeURI
1.encodeURI()是js中真正用来对URL编码的函数
2.它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号;/?:@&=+$,#也不进行编码,
编码后,它输出符号的utf-8形式,并且在每个字节前加上%
encodeURIComponent和decodeURIComponent
与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码.
因此,;/?:@&=+$,#这些在encodeURI()中不被编码的符号,在encodeURIComponent中统统会被编码.
var test = 'http://www.baidu.com/my app?search=a&b=3#2哈哈';
var test1 = encodeURIComponent(test);
var test2 = encodeURI(test);
console.log(test); // http://www.baidu.com
console.log(test1); // http%3A%2F%2Fwww.baidu.com%2Fmy%20app%3Fsearch%3Da%26b%3D3%232%E5%93%88%E5%93%88,浏览器无法解析这个地址
console.log(test2); // http://www.baidu.com/my%20app?search=a&b=3#2%E5%93%88%E5%93%88,浏览器无法解析这个地址
var test3 = decodeURIComponent(test1);
var test4 = decodeURI(test2);
console.log(test3);
console.log(test4);
var test5 = escape(test);
var test6 = unescape(test5);
console.log(test5); // http%3A//www.baidu.com/my%20app%3Fsearch%3Da%26b%3D3%232%u54C8%u54C8
console.log(test6); // http://www.baidu.com/my app?search=a&b=3#2哈哈
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。